package net.halflite.mzkr.util;

import java.nio.charset.Charset;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Date;

import org.apache.commons.lang.StringUtils;

public class EncodeUtils {

	private EncodeUtils() {
	}

	/** エンコード方式 */
	private static final String MD5_ENCODE = "MD5";
	
	/** 
	 * MD5ハッシュ値を求める
	 * 
	 * @param value 変換したい文字列
	 * @return MD5ハッシュ値返ります。 変換エラーの時は空文字が返ります。
	 */
	public static String md5(String value) {
		try {
			MessageDigest md = MessageDigest.getInstance(MD5_ENCODE);
			byte[] digest = md.digest(value.getBytes(Charset.defaultCharset()));
			return byteToHex(digest);
		} catch (NoSuchAlgorithmException e) {
			return "";
		}
	}
	
	public static String createHash(String address) {
		String seed = String.format("%d %s", new Date().getTime(), address);
		return md5(seed);
	}
	
	/** バイト配列を16進文字列に変換 */
	private static String byteToHex(byte[] bytes) {
		StringBuilder builder = new StringBuilder();
		for (byte b : bytes) {
			builder.append(StringUtils.leftPad(Integer.toHexString(b & 0xff), 2, '0'));
		}
		return builder.toString();
	}
}
